package br.edu.universo.si.projeto2.infojob.server.persistencia;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

import br.edu.universo.si.projeto2.infojob.client.bean.BeanCurriculoCurso;
import br.edu.universo.si.projeto2.infojob.client.bean.BeanProfissionalCurriculo;
import br.edu.universo.si.projeto2.infojob.server.Database;

/**
 * Classe de persistência de Curso.
 * @author Andrey A. de Oliveira e Anizair Lopes
 */
public class PCurriculoCurso
{

	/**
	 * Busca todos os cursos de um currículo.
	 * @author Anizair Lopes.
	 * @param id
	 * @return List<BeanCurriculoCurso>
	 * @throws ClassNotFoundException
	 * @throws Exception
	 */
	public static List<BeanCurriculoCurso> getlistCurriculoCurso(Integer id)
			throws ClassNotFoundException, Exception {
		List<BeanCurriculoCurso> lstCursos = new ArrayList<BeanCurriculoCurso>();
		try {
			Database database = Database.getInstance();

			String qry = "Select * from infojob.tb_curriculo_cursos where id_curriculo = " + id;
			Statement stm = database.getStatement();
			ResultSet rs = stm.executeQuery(qry);
			while (rs.next()) {
				BeanCurriculoCurso bcursos = new BeanCurriculoCurso();
				bcursos.setId(rs.getInt("id"));
				bcursos.setCargaHoraria(rs.getInt("carga_horaria"));
				bcursos.setCurso(rs.getString("curso"));
				bcursos.setInstituicao(rs.getString("instituicao"));
				BeanProfissionalCurriculo bpcur = new BeanProfissionalCurriculo();
				bpcur.setId(rs.getInt("id_curriculo"));
				bcursos.setBProfissionalCurriculo(bpcur);
				lstCursos.add(bcursos);

			}

		} catch (Exception e) {
			e.printStackTrace();
		} 
		return lstCursos;

	}

	/**
	 * Salvar cursos.
	 * @author Anizair Lopes.
	 * @param bcurcuros
	 * @return
	 * @throws ClassNotFoundException
	 * @throws SQLException
	 * @throws Exception
	 */
	public static Integer salvarCursos(BeanCurriculoCurso bcurcuros) throws ClassNotFoundException, SQLException,  Exception{
	  
	  int idCurriculo = 0;
	  try{
	    Database database = Database.getInstance();
	    //pega o ultimo valor gerado no banco para a tabela curriculo_cursos
	    //isso e feito para caso de uma inclusao do curriculo_curso neste momento
	    //nao tenho o id gerado
	    String qryValor = "select last_value from infojob.tb_profissional_curriculo_id_seq";
	    Statement pstmValor = database.getStatement();
	    ResultSet rsvalor = pstmValor.executeQuery(qryValor);
	    while(rsvalor.next()){
	    	idCurriculo = rsvalor.getInt("last_value");
	    }
	    
	    String qry = "INSERT into infojob.tb_curriculo_cursos(id_curriculo, curso, carga_horaria, instituicao) " +
	    	         " Values(?, ?, ?, ?);";    
	    
	    PreparedStatement pstm = database.getPreparedStatement(qry);
	    if (bcurcuros.getBProfissionalCurriculo().getId() == 0){
	      bcurcuros.getBProfissionalCurriculo().setId(idCurriculo);	
	    } else {
	    	idCurriculo = bcurcuros.getBProfissionalCurriculo().getId();
	    }
	    
	    pstm.setInt(1, bcurcuros.getBProfissionalCurriculo().getId());	    
	    pstm.setString(2, bcurcuros.getCurso());
	    pstm.setInt(3, bcurcuros.getCargaHoraria());
	    pstm.setString(4, bcurcuros.getInstituicao());
	    pstm.executeUpdate();
	    return idCurriculo;
	  }catch (Exception e) {
		throw new Exception(e.getMessage());		
	  }
	  
	}

	/**
	 * Exclui curso.
	 * @author Anizair Lopes.
	 * @param bCurriculoCurso
	 * @throws ClassNotFoundException
	 * @throws Exception
	 */
	public static void excluirCurso(BeanCurriculoCurso bCurriculoCurso) throws ClassNotFoundException, Exception {
		try{
		  Database database = Database.getInstance();
		  String qry = "Delete from infojob.tb_curriculo_cursos where id = ?";
		  PreparedStatement pstm = database.getPreparedStatement(qry);
		  pstm.setInt(1, bCurriculoCurso.getId());
		  pstm.executeUpdate();
		} catch (Exception e) {
			throw new Exception(e.getMessage());
		}
	}

	/**
	 * Exclui todos os cursos correspondentes a um currículo.
	 * @author Andrey A. de Oliveira
	 * @param curriculo
	 * @throws ClassNotFoundException
	 * @throws SQLException
	 */
	public static void excluirTodosCursosDoCurriculo(BeanProfissionalCurriculo curriculo)
		throws ClassNotFoundException, SQLException
	{
		Database database = Database.getInstance();
		PreparedStatement pstmt = 
			database.getPreparedStatement("DELETE FROM infojob.tb_curriculo_cursos WHERE id_curriculo = ?; ");
		pstmt.setInt(1, curriculo.getId());
	
		pstmt.executeUpdate();
	}

	/**
	 * Exclui todos os cursos correspondentes a um currículo, com controle transacional.
	 * @author Andrey A. de Oliveira
	 * @param conn
	 * @param curriculo
	 * @throws ClassNotFoundException
	 * @throws SQLException
	 */
	public static void excluirTodosCursosDoCurriculo(Connection conn, BeanProfissionalCurriculo curriculo)
		throws ClassNotFoundException, SQLException
	{
		Database database = Database.getInstance();
	
		PreparedStatement pstmt = 
			database.getPreparedStatement(conn, "DELETE FROM infojob.tb_curriculo_cursos WHERE id_curriculo = ?; ");
	
		pstmt.setInt(1, curriculo.getId());
	
		pstmt.executeUpdate();
	}

	/**
	 * Exclui todos os conhecimentos correspondentes a um currículo. 
	 * @author Andrey A. de Oliveira
	 * @param curriculo
	 * @throws ClassNotFoundException
	 * @throws SQLException
	 */
	public static void excluirTodosConhecimentosDoCurriculo(BeanProfissionalCurriculo curriculo)
		throws ClassNotFoundException, SQLException
	{
		Database database = Database.getInstance();

		PreparedStatement pstmt = 
			database.getPreparedStatement("DELETE FROM infojob.tb_curriculo_conhecimentos WHERE id_curriculo = ?; ");

		pstmt.setInt(1, curriculo.getId());
		pstmt.executeUpdate();
	}

	/**
	 * Exclui todos os conhecimentos correspondentes a um currículo, com controle transacional. 
	 * @author Andrey A. de Oliveira
	 * @param curriculo
	 * @throws ClassNotFoundException
	 * @throws SQLException
	 */
	public static void excluirTodosConhecimentosDoCurriculo(Connection conn, BeanProfissionalCurriculo curriculo)
		throws ClassNotFoundException, SQLException
	{
		Database database = Database.getInstance();
	
		PreparedStatement pstmt = 
			database.getPreparedStatement(conn, "DELETE FROM infojob.tb_curriculo_conhecimentos WHERE id_curriculo = ?; ");
	
		pstmt.setInt(1, curriculo.getId());
		pstmt.executeUpdate();
	}
}